home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 003 / header.arc / HEADER.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1986-05-16  |  5.5 KB  |  177 lines

  1. program header;
  2. {$c-}
  3.  
  4. { Copyright (c) 1986 Proud Products Inc }
  5.  
  6. { Filename...............header.pas }
  7. { Program................Read dBASE III Header v1.0 }
  8. { Date started...........05/08/86 }
  9. { Last update............05/13/86 }
  10. { Language...............TURBO PASCAL 3.0 }
  11. { Programmer.............Douglas Apperley }
  12.  
  13.  
  14. type
  15.   fields                                     = string[11];
  16.   char80                                     = string[80];
  17.   cmdstring                                  = string[127];
  18.  
  19. var
  20.   field_type,terminator,version_number         : char;
  21.   total_records                                : real;
  22.   tlhs,number_of_fields,length_of_record       : integer;
  23.   field_len,field_dec,i,j                      : integer;
  24.   ok1                                          : boolean;
  25.   cmdbuffer                                    : cmdstring;
  26.   last_up_date1,last_up_date2,last_up_date3    : string[3];
  27.   field_names                                  : string[11];
  28.   input_file,ftype                             : string[15];
  29.   work_field                                   : string[32];
  30.   work_hold                                    : string[31];
  31.   dbf_file                                     : text[$800];
  32.   text_file                                    : text[$800];
  33.   number_of_records                            : array[1..4] of char;
  34.   hold,header                                  : array[1..2000] of char;
  35.   cmdline                                      : cmdstring absolute cseg:$80;
  36.  
  37. const
  38.   blanks='                                    ';
  39.  
  40.  
  41. { lhs  =  length of the header structure }
  42. { tlhs =  total length of the header structure }
  43.  
  44.  
  45. procedure initialize;
  46. begin
  47.   textbackground(black);
  48.   textcolor(white);
  49.   j:=1;
  50.   for i:=1 to 200 do
  51.     header[i]:=' ';
  52.   cmdbuffer:=cmdline;
  53.   if paramcount<>1 then
  54.   begin
  55.     writeln;
  56.     writeln('One parameter expected');
  57.     writeln;
  58.     writeln('This program will display the structure of a dBASE III (r) file,');
  59.     writeln('that is passed as a parameter.  A file with the same name and an');
  60.     writeln('extension of STR will be created.  This is a text file containing');
  61.     writeln('the DBF file structure.');
  62.     halt;
  63.   end;
  64.   input_file:=paramstr(1);
  65. end;
  66.  
  67.  
  68. procedure open_files;
  69. begin
  70.   assign(dbf_file,input_file);
  71.   if pos('.',input_file)=0 then
  72.     assign(dbf_file,input_file+'.DBF');
  73.   {$I-} reset(dbf_file) {I$+};
  74.   ok1:=(ioresult=0);
  75.   if not ok1 then
  76.   begin
  77.     writeln;
  78.     writeln('File not found');
  79.     halt;
  80.   end;
  81.   assign(text_file,input_file+'.STR');
  82.   if pos('.',input_file)>0 then
  83.     assign(text_file,copy(input_file,1,pos('.',input_file))+'STR');
  84.   rewrite(text_file);
  85. end;
  86.  
  87.  
  88. procedure close_files;
  89. begin
  90.   close(dbf_file);
  91.   close(text_file);
  92. end;
  93.  
  94.  
  95. procedure read_header;
  96. begin
  97.   for i:=1 to 32 do
  98.     read(dbf_file,header[i]);
  99.   version_number:=header[1];
  100.   last_up_date1:=header[2];
  101.   last_up_date2:=header[3];
  102.   last_up_date3:=header[4];
  103.   for i:=1 to 4 do
  104.     number_of_records[i]:=header[i+4];
  105.   total_records:=ord(number_of_records[1])+ord(number_of_records[2])*256;
  106.   total_records:=total_records+ord(number_of_records[3])*512+ord(number_of_records[4])*768;
  107.   tlhs:=ord(header[9])+ord(header[10])*128;
  108.   length_of_record:=ord(header[11])+ord(header[12])*256;
  109.   writeln;
  110.   writeln(text_file);
  111.   writeln('Data Based Advisor Magazine');
  112.   writeln('1975 5th Ave #105');
  113.   writeln('San Diego, CA 92101');
  114.   writeln('(619) 236-1182');
  115.   writeln;
  116.   writeln('Structure for database   : ',input_file);
  117.   writeln(text_file,'Structure for database   : ',input_file);
  118.   writeln('Number of data records   : ',total_records:6:0);
  119.   writeln(text_file,'Number of data records   : ',total_records:6:0);
  120.   writeln('Date of last update      : ',ord(last_up_date2),'/',ord(last_up_date3),'/',ord(last_up_date1));
  121.   writeln(text_file,'Date of last update      : ',ord(last_up_date2),'/',ord(last_up_date3),'/',ord(last_up_date1));
  122.   writeln('Field  Field name  Type         Width    Dec');
  123.   writeln(text_file,'Field  Field name  Type         Width    Dec');
  124.   read(dbf_file,terminator);
  125.   while (ord(terminator)<>13) do
  126.   begin
  127.     for i:=1 to 31 do
  128.       read(dbf_file,header[i]);
  129.     work_hold:='';
  130.     work_field:='';
  131.     for i:=1 to 32 do
  132.       work_hold:=work_hold+header[i];
  133.     work_field:=terminator+work_hold;
  134.     field_names:=copy(work_field,1,11);
  135.     field_type:=copy(work_field,12,1);
  136.     if field_type='M' then
  137.       field_len:=10
  138.     else
  139.       field_len:=ord(copy(work_field,17,1));
  140.     field_dec:=ord(copy(work_field,18,1));
  141.     write(j:5,'  ',field_names,' ');
  142.     write(text_file,j:5,'  ',field_names,' ');
  143.     j:=j+1;
  144.     case field_type of
  145.       'C' : ftype:='Character';
  146.       'N' : ftype:='Numeric';
  147.       'L' : ftype:='Logical';
  148.       'D' : ftype:='Date';
  149.       'M' : ftype:='Memo';
  150.     end;
  151.     if field_dec=0 then
  152.     begin
  153.       writeln(ftype,copy(blanks,1,15-length(ftype)),field_len:3);
  154.       writeln(text_file,ftype,copy(blanks,1,15-length(ftype)),field_len:3);
  155.     end
  156.     else
  157.     begin
  158.       writeln(ftype,copy(blanks,1,15-length(ftype)),field_len:3,'     ',field_dec:2);
  159.       writeln(text_file,ftype,copy(blanks,1,15-length(ftype)),field_len:3,'     ',field_dec:2);
  160.     end;
  161.     read(dbf_file,terminator);
  162.   end;
  163. writeln('** Total **                      ',length_of_record:4);
  164. writeln(text_file,'** Total **                      ',length_of_record:4);
  165. end;
  166.  
  167.  
  168. {main line}
  169.  
  170. begin
  171.   initialize;
  172.   open_files;
  173.   read_header;
  174.   close_files;
  175. end.
  176. {eof}
  177.